<?php
namespace Common\Controller;
use Think\Controller;
class CommonController extends Controller {
    /**
     * 多张图片路径补全
     * 传字段字符串：MD5,md5,md5
     */
    protected function _fullmanyImgs($md5str){
        $data=array();
        if($md5str){
            $md5str=explode(',',$md5str);
            foreach ($md5str as $v){
                $data[]=$this->_fullimg($v);
            }
        }
        return $data;
    }

    /**
     * 图片路径补全
     *type  :用户user
     */
    protected function _fullimg($imgurl='',$type=''){
        if(empty($imgurl)){
            switch ($type) {
                case 'user':
                    return array(
                        'md5'=>'',
                        'url'=>base_url().'Public/images/default_user.png'
                    );
                    break;
                case 'coach':
                    return array(
                        'md5'=>'',
                        'url'=>base_url().'Public/images/default_coach.png'
                    );
                    break;

                default:
                    return array(
                        'md5'=>'',
                        'url'=>''
                    );
                    break;
            }
        }
        if(strpos($imgurl, 'http')!==false && $type=='user'){
            return array(
                'md5'=>'',
                'url'=>$imgurl
            );
        }
        $md5=$imgurl;
        $file=M('files')->where('md5="'.$md5.'"')->field('md5,url')->find();
        $file['url']=base_url().$file['url'];
        return $file;
    }



    /***/
    public function dumpall($data){
        echo "<pre>";

        print_r($data);
        echo "</pre>";
    }
    /**
     * 调用一次上传file文件域里所有的文件，类型必须一致
     * 上传文件 只能被方法或接口调用 调用示例：$this->_uploadfile('music');
     * 传表示文件类型的标志过来，如music表示音乐文件 image表示图片文件
     * 成功返回部分文件路径和完整路径，提交时取部分图片路径
     * 所有上传的文件都必须记录MD5索引
     */
    protected function _uploadfile($type){
        // 定义文件存放文件夹
        $dir_date=date('Y-m-d',time());
        switch ($type) {
            case 'music':
                $destdir= 'Public/upload/music/'.$dir_date.'/';
                break;
            case 'image':
                $destdir= 'Public/upload/images/'.$dir_date.'/';
                break;
            case 'excel':
                $destdir= 'Public/upload/excel/'.$dir_date.'/';
                break;

            default:
                $this->_internalError('无文件类型标志');
                break;
        }
        $dir = APP_ROOT .'/'.$destdir;//所在目录
        $url=base_url().$destdir;//访问路径
        if(empty($_FILES)){
            $this->_internalError('请选择文件');
        }
        $imgs=array();
        foreach ($_FILES as $file) {
            $typeinfo=pathinfo($file['name']);
            if($type=='excel' && strtolower($typeinfo['extension'])!='xls'){
                $this->_internalError('请上传xls文件');
            }
            if (! file_exists ($dir)) {
                mkdir($dir, 0777, true);
            }
            $md5=md5_file($file['tmp_name']);
            $exist_file=M('files')->where('md5="'.$md5.'"')->find();
            if(!empty($exist_file)){
//				文件已存在，返回该文件
                $imgs[]=array('md5'=>$md5,'url'=>base_url().$exist_file['url'],'pathname'=>APP_ROOT.'/'.$exist_file['url']);
            }else{
                $realname=$md5.'.'.$typeinfo['extension'];
                if(move_uploaded_file($file['tmp_name'],$dir.$realname)){
//					保存文件成功，保存文件MD5索引记录
                    M('files')->add(array(
                        'md5'=>$md5,
                        'url'=>$destdir.$realname
                    ));
                    $imgs[]=array('md5'=>$md5,'url'=>$url.$realname,'pathname'=>$dir.$realname);
                }
            }
        }
        return $imgs;
    }



    /**
     *上传图片接口
     */
    public function uploadImgs(){
        $imgs=$this->_uploadfile('image');
        $this->_success('图片上传成功',$imgs);
    }

    protected function _param($key, $msg=null) {
        if(empty($_REQUEST[$key]) && $msg) {
            $this->_internalError($msg);
        }
        return $_REQUEST[$key];
    }
    protected function _internalError($msg, $data=array()) {
        $ret = array(
            'status'=>500,
            'message'=>$msg
        );
        $ret['show_data'] = $data;
        // dump($ret);die;
        die(json_encode($ret));
    }

    protected function _success($msg, $data=array(),$extra=null) {
        header("Content-Type: application/json; charset=utf-8");
        $ret = array(
            'status'=>200,
            'message'=>$msg
        );
        $ret['show_data'] = $data;
        foreach ($extra as $k => $v) {
            $ret[$k]=$v;
        }
        die(json_encode($ret));
    }
    


}